perm filename RATE.SAI[4,KMC] blob
sn#156968 filedate 1975-04-19 generic text, type T, neo UTF8
BEGIN
REQUIRE "IODEFS[1,BLF]" SOURCE_FILE;
DEFINE ITT(X,N) = "FOR X←1 STEP 1 UNTIL N DO";
DEFINE ∂=" &BLANK1& ";
STRING BLANK1,BLANK10,BLANK20,DELIMSS,FORMFEED;
INTEGER DICE, SW, P, P1, Q, Q1, I, I1, J, J1, K, K1, W, L, T, WFLAG;
INTEGER NEXTL,NEXTA,LI,SSLEN,ATLEN,ERROR,IDUM,INCH1,INCH2,EOF1,EOF2;
REAL R, RR, RRR;
STRING S, SS, SSS,ST,SY,SV,FILENAME,SU,LASTNAME,LASTLINE,ZEROKS,TOPIC,LASTB,AREA;
STRING OUTFILE,RATER,DIM,INTNAME;
STRING S1,S2,S3;
STRING PROC RIGHTZ(INTEGER L; STRING S);
RETURN(IF LN(S)<L THEN ZEROKS[1 TO L-LN(S)]&S ELSE S[1 TO L]);
STRING PROC OFFS(STRING S; INTEGER I);
BEGIN STRING ST; INTEGER L; L←LENGTH(S);
IF I<L THEN ST←S[I+1 TO L] ELSE ST←NULL; RETURN (ST) ; END;
PROC ERRORMESS(STRING S);
BEGIN SAY(S ↓ ↓ ); SAY("please copy this down and notify someone" ↓ ↓ );
END;
PROC FATALERROR(STRING S);
BEGIN INTEGER I; ERRORMESS(S); RELEASE(INCH); I←CALL(0,"EXIT"); END;
BOOLEAN PROC EQS(STRING S);
RETURN(IF EQU(S,NULL) OR S=" " THEN TRUE ELSE FALSE);
STRING PROC READIN(INTEGER CHAN);
BEGIN STRING S; S←INPUT(CHAN,1);
WHILE ¬EOF AND EQS(S) DO S←INPUT(CHAN,1);
IF EOF THEN IF CHAN=INCH1 THEN EOF1←EOF ELSE EOF2←EOF; RETURN(S); END;
PROC OUTB(INTEGER CHAN; STRING S);
BEGIN IF ¬EQU(SV,S[1 TO 6]) THEN BEGIN OUT(OUCH, NULL ↓ ); SV←S[1 TO 6]; END;
OUT(OUCH, S); END;
STRING PROC READNOC(INTEGER I);
BEGIN STRING S,SDUM; INTEGER FLAG; FLAG←0;
WHILE ¬EOF AND ¬EOF1 AND ¬EOF2 AND FLAG=0 DO BEGIN S←READIN(I);
IF EQU(S[1 TO 1],FORMFEED) THEN SDUM←LOP(S);
IF EQU(S[1 TO 4],"(***") THEN FLAG←0
ELSE IF EQU(S,NULL) THEN FLAG←0
ELSE IF EQU(S," ") THEN FLAG←0
ELSE FLAG←1; END;
RETURN (S); END;
PROC READCOMMENT(INTEGER I);
BEGIN IF EQU(SS[1 TO 7], "COMMENT") THEN BEGIN
WHILE ¬EQU(SS[2 TO 2],";") AND ¬EQU(SS[3 TO 3],";") AND ¬EOF1 AND ¬EOF2
DO SS←READIN(I);
SS←READIN(I);
END; END;
INTEGER PROCEDURE SLESS(STRING S1,S2);
BEGIN "SLESS"
INTEGER C1,C2;
C1←LOP(S1); C2←LOP(S2);
WHILE C1 ∧ C2 ∧ C1=C2 DO
BEGIN
C1←LOP(S1); C2←LOP(S2);
END;
RETURN(IF C1=C2 THEN 0 ELSE IF C1 < C2 THEN -1 ELSE 1)
END "SLESS";
COMMENT RETURNS -1 IF S1<S2, +1 IF S1>S2 ;
INTEGER PROCEDURE BLANKLINE(STRING S2);
BEGIN "BLANKLINE"
INTEGER C,C1,C2; STRING S; S←S2;
C←LOP(S); C1←32; C2←9;
IF C=0 THEN RETURN(1);
WHILE C ∧ ((C=C1) OR (C=C2)) DO C←LOP(S);
RETURN(IF C=0 THEN 1 ELSE 0)
END "BLANKLINE";
COMMENT RETURNS 1 IF S=BLANKS OR TABS, 0 IF NOT ;
FORMFEED← '14;
ZEROKS←"000000000000";
BLANKS←" ";
BLANK1←" ";
BLANK20←" ";
BLANK10←" ";
FLAG←0;
STDBRK(INCH);
DELIMSS← '15 & '12 & '40 & '11 & '14;
SETBREAK(1, '12, '14 & '15, "INS");
SETBREAK(13, '12 & '40, '15, "INS");
SETBREAK(14,DELIMSS & " ?.()","","INR");
SETBREAK(15,"αλ","","INR");
COMMENT BREAKSETS 17 AND 18 ARE RESERVED FOR TEMPORARY USE;
SW←0; J←0;
COMMENT ********************************* ;
WHILE TRUE DO BEGIN "TOPBLOCK"
S←ASK("H FOR HELP -- GO?");
IF EQU(S, "X") THEN DONE "TOPBLOCK";
IF EQU(S, "H") THEN BEGIN
SAY("R for rating dialogs between doctors and patients " ↓ ↓ );
SAY("F for Franks routine to edit a dialog file" ↓ ↓ ↓ );
END; COMMENT END OF H ROUTINE;
COMMENT R ROUTINE FOR RATING DIA FILES;
IF EQU(S,"R") THEN BEGIN "R"
SAY("routine to rate dialog files " ↓ );
SETBREAK(17,"#","","INR");
SETBREAK(18,"%","","INR");
ERROR←1;
WHILE ERROR DO BEGIN "RATER"
RATER←ASK(NULL ↓ & "Rater's name=");
FILIN(RATER&".TSK");
IF FLAG≠0 THEN SAY(RATER&" not recognized as a rater -- try again" ↓ ↓ )
ELSE ERROR←0;
END "RATER" ;
SAY(" Rater's name is "&RATER ↓ ↓ ); RELEASE(INCH);
WHILE TRUE DO BEGIN "NEWONE"
COMMENT ***** SET INTNAME AND DIM ;
FILIN(RATER&".TSK");
SS←INPUT(INCH,1); ERROR←1;
WHILE NOT EOF DO BEGIN "TSKFILE"
IF ¬EQS(SS) THEN BEGIN ERROR←0; TOPIC←SS; DONE "TSKFILE" ; END;
SS←INPUT(INCH,1);
END "TSKFILE" ;
RELEASE(INCH);
IF ERROR THEN BEGIN SAY("You dont have any files to rate." ↓ ↓ );
DONE "TOPBLOCK" ; END;
SV←SS;
INTNAME←SS[1 TO 2]; DIM←SS[4 TO ∞];
SAY(NULL ↓ & "doing "&INTNAME&" "&DIM ↓ ↓ );
COMMENT ***** GET OUTPUT FILE NAME AND OPEN THE OUTPUT FILE ;
FILIN("TMP.FIL[RAT,KMC]"); IF FLAG THEN FATALERROR("NO TMP.FIL");
SS←INPUT(INCH,1); IF EQU(SS,NULL) THEN SS←INPUT(INCH,1);
I←CVD(SS); RELEASE(INCH);
FILOUT("TMP.FIL[RAT,KMC]"); OUT(OUCH, CVS(I+1) ↓ ); RELEASE(OUCH);
OUTFILE←CVS(I)&".TMP";
FILOUT(OUTFILE);
OUT(OUCH, "INT = " & INTNAME & " , DIM = " & DIM & " , RATER = " & RATER ↓ ↓ );
COMMENT ****** FIND WHERE THE INTERVIEW IS ;
FILIN("INDEX");
SS←INPUT(INCH,1);
WHILE NOT EOF AND (2>LENGTH(SS) OR ¬EQU(SS[1 TO 2], INTNAME)) DO SS←INPUT(INCH,1);
IF EOF THEN FATALERROR("INDEX - CANT FIND INTFILE "&INTNAME);
WHILE NOT EOF AND (2>LENGTH(SS) OR ¬EQU(SS[1 TO 1],"*")) DO SS←INPUT(INCH,1);
IF EOF THEN FATALERROR("INDEX - NO FILENAME "&INTNAME);
S←SS[2 TO ∞]; RELEASE(INCH);
COMMENT ****** READ THRU THE FILE FOR THE INTERVIEW ;
FILIN(S);
SS←INPUT(INCH,1); ERROR←1;
WHILE ¬EOF AND ERROR DO BEGIN "READTHRU"
S←SCAN(SS,17,IDUM);
IF SS AND EQU(SS[3 TO 4],INTNAME) THEN BEGIN ERROR←0; DONE"READTHRU" ; END;
SS←INPUT(INCH,1);
END "READTHRU" ;
IF ERROR THEN FATALERROR("ERROR IN READ -- NO INTERVIEW " &INTNAME );
COMMENT ***** READ PAST THE FIRST JUNK;
SS←INPUT(INCH,1);
WHILE ¬EOF DO BEGIN "READFILE"
COMMENT ************ GET AND PRINT EACH IO PAIR;
S1←S2←S3←NULL;
WHILE ¬EOF AND BLANKLINE(SS) DO SS←INPUT(INCH,1);
S←SS; SU←SCAN(S,18,IDUM);
IF LENGTH(S)≥9 ∧ EQU(S[1 TO 9],"%(End of ") THEN DONE "READFILE" ;
S1←SS; SS←INPUT(INCH,1);
IF BLANKLINE(SS) THEN S1←S1[4 TO ∞-2] ELSE
BEGIN
S1←S1[4 TO ∞]; S2←SS; SS←INPUT(INCH,1);
IF BLANKLINE(SS) THEN S2←S2[1 TO ∞-2] ELSE
BEGIN S3←SS[1 TO ∞-2]; SS←INPUT(INCH,1); END;
END;
SAY(NULL ↓ ↓ ↓ ↓ ↓ );
SAY(S1 ↓ ); IF S2 THEN SAY(S2 ↓ ); IF S3 THEN SAY(S3 ↓ ); SAY(NULL ↓ );
S1←S2←S3←NULL;
WHILE ¬EOF AND BLANKLINE(SS) DO SS←INPUT(INCH,1);
S1←SS; SS←INPUT(INCH,1);
IF BLANKLINE(SS) THEN S1←S1[3 TO ∞-3] ELSE
BEGIN
S1←S1[3 TO ∞]; S2←SS; SS←INPUT(INCH,1);
IF BLANKLINE(SS) THEN S2←S2[1 TO ∞-3] ELSE
BEGIN S3←SS[1 TO ∞-3]; SS←INPUT(INCH,1); END;
END;
SAY(S1 ↓ ); IF S2 THEN SAY(S2 ↓ ); IF S3 THEN SAY(S3 ↓ ); SAY(NULL ↓ );
ERROR←1;
WHILE ERROR=1 DO BEGIN "ERRORSENT"
SAY("dimension = "&DIM & " rate 0 1 2 3 4 5 6 7 8 9 " ↓ ↓ );
S←ASK("RATING = ");
IF EQU(S,"X") THEN DONE "READFILE";
S3←S; S←LOP(S); I←LOP(S3); IF ¬(48≤I AND I≤57) THEN
BEGIN SAY(NULL ↓ & "again: "); CONTINUE "ERRORSENT"; END;
S1←ASK(NULL ↓ & "The number you selected was "&S&" Was that OK? (TYPE Y OR N) " );
IF EQU(S1,"Y") THEN ERROR←0 ELSE SAY(NULL ↓ & "again: ");
END "ERRORSENT" ;
OUT(OUCH, S ↓ );
END "READFILE" ;
SAY(NULL ↓ ↓ ↓ );
SAY(" ***** END OF INTERVIEW ***** " ↓ ↓ );
SAY("thru "&INTNAME ↓ ); RELEASE(INCH); RELEASE(OUCH);
COMMENT ******** UPDATE THE TASK FILE ;
FILIN(RATER&".TSK");
FILOUT(RATER&".NEW");
SS←INPUT(INCH,1); ERROR←1;
WHILE NOT EOF DO BEGIN
IF EQU(SS,SV) THEN OUT(OUCH," "&SS ↓ ) ELSE OUT(OUCH,SS ↓ );
SS←INPUT(INCH,1);
END;
RELEASE(INCH); RELEASE(OUCH);
FILIN(RATER&".TSK"); RENAME(INCH, NULL, 0, IDUM); RELEASE(INCH);
FILIN(RATER&".NEW"); RENAME(INCH, RATER&".TSK", 0, IDUM); RELEASE(INCH);
S←ASK(NULL ↓ & "do another one[Y or N]?");
IF ¬EQU(S,"Y") THEN DONE "NEWONE";
END "NEWONE" ;
SAY("DONE WITH RATINGS" ↓ );
DONE "TOPBLOCK" ;
END "R" ;
COMMENT F ROUTINE FOR FRANK HILF;
IF EQU(S,"F") THEN BEGIN "F"
SAY("This formats a file for Frank Hilfs use " ↓ );
FILENAME←ASK("FILIN="); FILIN(FILENAME);
SS←ASK("FILOUT="); FILOUT(SS);
SS←INPUT(INCH,1);
I←0;
WHILE NOT EOF DO BEGIN "EDIT"
ST←SS;
IF ¬EQS(SS) AND ¬(SS="%") THEN BEGIN
IF I=0 THEN BEGIN ST←"α"&SS&"β"; I←1; END
ELSE BEGIN ST←"ε"&SS&"λ"; I←2; END;
END
ELSE IF I=2 THEN I←0;
OUT(OUCH," "&ST ↓ );
SS←INPUT(INCH,1);
END "EDIT" ;
RELEASE(OUCH); RELEASE(INCH);
END "F" ;
COMMENT T ROUTINE FOR TESTING THINGS;
IF EQU(S,"T") THEN BEGIN
SAY("1=" & CVS(BLANKLINE(" ")) ↓ );
SAY("1=" & CVS(BLANKLINE(" ")) ↓ );
SAY("1=" & CVS(BLANKLINE(" ")) ↓ );
SAY("1=" & CVS(BLANKLINE("")) ↓ );
SAY("0=" & CVS(BLANKLINE(" Y ")) ↓ );
END; COMMENT END OF S=T;
END "TOPBLOCK" ; COMMENT END TO INFINITE LOOP;
ITT(I,3) RELEASE(INCH); ITT(I,3) RELEASE(OUCH);
COMMENT END OF PROGRAM;
END;